[Amazon Rekognition] 部分画像の利用と、サイズのフィルタでCustom Labelsの検出精度が上げられることを確認してみました
1 はじめに
CX事業本部の平内(SIN)です。
Amazon Rekognition の Custom Labelsでは、ビジネスシーンに合せた独自のオブジェクトの検出が可能ですが、データセットの数が少なすぎると、やはり、精度の高いモデルを作成するのは難しいと思います。しかし、少数のデータセットでモデルが作成できれば、それに越した事はありません。
今回は、検出する画像に一定の条件を付加することで、どれぐらいの精度が出せるかを試してみました。
2 データセット
対象としたオブジェクトは、商品棚に釣られた以下の5種類の商品です。
- PRETZEL
- OREO
- PRIME
- CRATZ
- ASPARA
先日作成した、データセット作成用のアプリで、照明を変化させたり、凹み具合を変更したり、回転してみたりして、各商品60枚ほど撮影しました。所要時間は、1時間程度です。
参考:[Amazon Rekognition] Custom Labelsのデータセットを高速に作成するアプリを作ってみました
各商品のラベルが、それぞれ60程度となっています。
3 モデル
上記のデータセットで、作成したモデルは、F1 score 0.983となりました。
あくまで、商品棚に釣られた商品の検出という要件から、以下の制約を課したことで、少数のラベルで、高いスコアを得られているものと理解してます。
- 商品は、正面から見る(概ね正面から撮影する)
- 裏返しは考慮しない(裏向けに釣られる事自体がエラー)
4 全体撮影
商品棚全体を撮影した画像でのDetectionは、ことごとく失敗しました。この利用方法では、このモデルは、使えません。
やや、近づくと少し良くなりますが、まだ、実用に耐えられません。
5 対象物のみ
更に近づいて、対象商品のだけを撮影した画像では、ほぼ100%検出が可能でした。(データセットの作り方にも影響していると思います)
6 部分画像
先の結果から、全体の撮影画像から、マーカー等で、対象商品の撮影されてる部分だけを対象とすることで、精度が上がるのではという事で、試してみました。
参考:[OpenCV] ArUcoマーカーを使用して、安定した商品の監視映像を撮影してみました。
ここまでの撮影は、2304 × 1536で行われていましが、一部を切り取るという考えから、320×240で試してみましたが、かなりの精度が出ました。
7 部分画像(低解像度)
部分画像となると、最初の画像の解像度に依存しますが、確認のため、160×90で試してみた結果です。解像度が一定以下になると、精度は、一気に下がるため、ある程度の解像度の確保が必要なようです。
8 対象物のサイズ
画像に占める対象物の大きさを条件にすると、検出の精度が更に上がります。
マーカー等で画像を処理すると、映るべき対象物のサイズが概ね計算できますので、検出結果からその情報を加味してフィルターするイメージです。
下は、本来正解であるはずの「CRATZ」より、Comfidenceの高い「PRIME」が多数検出されている様子です。
そして、同じ結果ですが、画像に占める対象物のサイズの高さを0.3以上としたフィルタを当てると、以下のようになります。
下記もサイズでフィルタすることで、Comfidenceの高い「PRIME」を排除している様子です。
9 最後に
Amazon Rekognition の Custom Labelsで、事前の画像の処理と条件フィルタを当てることで、オブジェクト検出の精度を上げられることを確認できました。
条件によって色々変わってくる(考慮すべき事項がある)と思いますが、これぐらい少数のデータセットで、これだけ精度が出せるであれば、十分使える場面があると思います。